/**
 * 
 */
package com.jf.cloud.service.sysmanager.common.taglib.html;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import java.io.IOException;

/**
 * 下拉列表标签处理类
 * 
 * @author 程伟平 2012-2-2
 */
public class SelectTag extends AbstractHtmlFormElementTag {
	/**
	 * 序列化版本UID
	 */
	private static final long serialVersionUID = 3555930298710353865L;

	/**
	 * 上级下拉列表
	 */
	private String parentCascadedSelect;

	/**
	 * 上级下拉列表参数名称
	 */
	private String parentParamName;

	/**
	 * AJAX请求URL
	 */
	private String ajaxURL;
	
	/**
	 * 是否默认首项（如果该属性为true，默认选择第一个选项）
	 */
	private String isDefault;

	/**
	 * 是否需要初始化
	 */
	private String requiredInit;

	/**
	 * 获取上级下拉列表
	 * 
	 * @return 上级下拉列表
	 */
	public String getParentCascadedSelect() {
		return parentCascadedSelect;
	}

	/**
	 * 设置上级下拉列表
	 * 
	 * @param parentCascadedSelect 上级下拉列表
	 */
	public void setParentCascadedSelect(String parentCascadedSelect) {
		this.parentCascadedSelect = parentCascadedSelect;
	}

	/**
	 * 获取上级下拉列表参数名称
	 * 
	 * @return 上级下拉列表参数名称
	 */
	public String getParentParamName() {
		return parentParamName;
	}

	/**
	 * 设置上级下拉列表参数名称
	 * 
	 * @param parentParamName 上级下拉列表参数名称
	 */
	public void setParentParamName(String parentParamName) {
		this.parentParamName = parentParamName;
	}

	/**
	 * 获取AJAX请求URL
	 * 
	 * @return AJAX请求URL
	 */
	public String getAjaxURL() {
		return ajaxURL;
	}

	/**
	 * 设置AJAX请求URL
	 * 
	 * @param ajaxURL AJAX请求URL
	 */
	public void setAjaxURL(String ajaxURL) {
		this.ajaxURL = ajaxURL;
	}
	
	/**
	 * 获取是否默认首项
	 * 
	 * @return 是否默认首项
	 */
	public String getIsDefault() {
		return isDefault;
	}

	/**
	 * 设置是否默认首项
	 * 
	 * @param isDefault 是否默认首项
	 */
	public void setIsDefault(String isDefault) {
		this.isDefault = isDefault;
	}
	
	/**
	 * 获取是否需要初始化
	 * 
	 * @return requiredInit
	 */
	public String getRequiredInit() {
		return requiredInit;
	}

	/**
	 * 设置是否需要初始化
	 * 
	 * @param requiredInit 是否需要初始化
	 */
	public void setRequiredInit(String requiredInit) {
		this.requiredInit = requiredInit;
	}

	@Override
	public int doStartTag() throws JspException {
		if (name == null || name.length() == 0) {
			throw new JspException("下拉列表标签名称属性――\"name\"不能为空！");
		}

		JspWriter writer = pageContext.getOut();

		// 开始标签
		StringBuffer sb = new StringBuffer();
		sb.append("<select");
		if (id != null && id.length() > 0) {
			sb.append(" id=\"");
			sb.append(id);
			sb.append("\"");
		}
		if (name != null && name.length() > 0) {
			sb.append(" name=\"");
			sb.append(name);
			sb.append("\"");
		}
		if (value != null && value.length() > 0) {
			sb.append(" selectVal=\"");
			sb.append(value);
			sb.append("\"");
		}
		if (parentCascadedSelect != null && parentCascadedSelect.length() > 0) {
			sb.append(" parentCascadedSelect=\"");
			sb.append(parentCascadedSelect);
			sb.append("\"");
		}
		if (parentParamName != null && parentParamName.length() > 0) {
			sb.append(" parentParamName=\"");
			sb.append(parentParamName);
			sb.append("\"");
		}
		if (ajaxURL != null && ajaxURL.length() > 0) {
			sb.append(" ajaxURL=\"");
			sb.append(ajaxURL);
			sb.append("\"");
		}
		if (isDefault != null && isDefault.length() > 0) {
			sb.append(" isDefault=\"");
			sb.append(isDefault);
			sb.append("\"");
		}
		if (onchange != null && onchange.length() > 0) {
			sb.append(" onchange=\"");
			sb.append(onchange);
			sb.append("\"");
		}
		if (cssClass != null && cssClass.length() > 0) {
			sb.append(" class=\"");
			sb.append(cssClass);
			sb.append("\"");
		}
		if (style != null && style.length() > 0) {
			sb.append(" style=\"");
			sb.append(style);
			sb.append("\"");
		}
		sb.append(">");

		try {
			writer.println(sb.toString());
		} catch (IOException ex) {
			throw new JspException("下拉列表标签HTML输出异常！", ex);
		}

		return EVAL_BODY_INCLUDE;
	}

	@Override
	public int doEndTag() throws JspException {
		JspWriter writer = pageContext.getOut();

		// 结束标签
		StringBuffer sb = new StringBuffer();
		sb.append("</select>");
		if (requiredInit != null && requiredInit.equals("true")) {
			sb.append("<script language=\"javascript\" type=\"text/javascript\">");
			sb.append(" $(function(){ TagUtil.initSelectOptions('" + id + "');});");
			sb.append("</script>");
		}

		try {
			writer.print(sb.toString());
		} catch (IOException ex) {
			throw new JspException("下拉列表标签HTML输出异常！", ex);
		}

		return EVAL_PAGE;
	}
}
